package cn.dengta.webapp.user.vo;

import java.util.Date;

import cn.dengta.common.util.Formats;
import cn.dengta.common.web.Client;
import cn.dengta.webapp.base.vo.AbstractVO;
import cn.dengta.webapp.user.entity.StartConfig;
import cn.dengta.webapp.user.model.Gender;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import me.codeplayer.util.X;

/**
 * 启动页配置表
 *
 * @author zw
 * @since 2022-07-25
 */
@Setter
@Getter
@Accessors(chain = true)
public class StartConfigVO extends AbstractVO<StartConfig> {

	private static final long serialVersionUID = 1L;

	/** 名称 */
	private String name;
	/** 图片 */
	private String images;
	/** 类型： 0=图片；1=视频 */
	private Integer type;
	/** 展示时长：秒 */
	private Integer showTime;
	/** 链接类型：0=H5 */
	private Integer linkType;
	/** 活动链接 */
	private String linkUrl;
	/** 开启时间 */
	private Date beginTime;
	/** 结束时间 */
	private Date endTime;
	/** 性别：0=女；1=男 */
	private Gender gender;
	/** 语言，多个逗号拼接 */
	private String language;
	/** 语言，多个逗号拼接 */
	private String language_;
	/** 客户端 */
	private String client;
	/** 状态：未生效；生效中；已过期 */
	public String statusDesc;
	/** 状态：0=未生效；1=生效中；-1=已过期 */
	public Integer status;
	/** 当前时间 */
	private Date nowTime;
	/** 版本是否审核中 */
	private boolean hasAudit;

	public static StartConfigVO from(StartConfig source) {
		return copy(source, StartConfigVO::new);
	}

	public String getBeginTime_() {
		return Formats.formatDatetime(beginTime);
	}

	public String getEndTime_() {
		return Formats.formatDatetime(endTime);
	}

	public Integer getGender() {
		return X.map(gender, Gender::getValue);
	}

	public String getGender_() {
		return X.map(gender, Gender::getLabel);
	}

	public String getClient_() {
		return X.map(Client.of(client), Client::getLabel);
	}

	public void getStatusDesc(final long baseTime) {
		String desc;
		int status;
		if (this.endTime.getTime() < baseTime) {
			desc = "已失效";
			status = -1;
		} else if (this.beginTime.getTime() > baseTime) {
			desc = "未生效";
			status = 0;
		} else {
			desc = "生效中";
			status = 1;
		}
		this.status = status;
		this.statusDesc = desc;
	}

}
